// 给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。

// 暴露接口
function reverseWords(s: string): string {
    const stack: string[] = [];// 字符串栈
    let res = '';// 结果字符串
    for (let i = 0; i < s.length; i++) {
        if (s[i] !== " ") {
            stack.push(s[i]);
        } else {// 遇到空格说明一个单词结束
            res = res + reverseWords_str(stack);
            res += " ";
        }
    }
    return res + reverseWords_str(stack);// 注意最后的单词反转
};

// 反转单词方法
function reverseWords_str(stack: string[]): string {
    let res: string = '';
    while (stack.length > 0) {
        res = res + stack.pop();
    }
    return res;
}


// 这道题目的难度比较小，在类JS语言中因为不存在可变字符串，所以必须要开辟额外的一片空间
// 思路其实也比较简单，先做一个字符串栈，用来存放单个的单词
// 步骤就是我们先遍历一遍原字符串，然后依次将单个字符加入字符栈
// 当遇到空格的时候，说明一个单词结束了，这个时候我们运行反转单词方法，
// 将栈中所有的单词反转并返回，然后拼接到结果字符串中（不要忘记了有空格）
// 遍历完返回即可，但要注意不要漏了最后单词的反转